package leetcode;
/**
 * 606.根据二叉树创建字符串
 * 你需要采用前序遍历的方式，将一个二叉树转换成一个由括号和整数组成的字符串。
 * 空节点则用一对空括号 "()" 表示。而且你需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对
 *
 * 输入: 二叉树: [1,2,3,4]
 * 输出: "1(2(4))(3)"
 *
 * 输入: 二叉树: [1,2,3,null,4]
 * 输出: "1(2()(4))(3)"
 */
public class Num_606 {
    //用于字符串的拼接
    private StringBuilder sb = new StringBuilder();
    //该方法表示，将以root为根节点的二叉树拼接到sb中
    public String tree2str(TreeNode root) {
        //边界条件
        if(root == null){
            return "";
        }
        //添加根节点的值
        sb.append(root.val);
        //先看左子树的情况
        if(root.left != null){
            //左子树不为空
            sb.append("(");
            tree2str(root.left);
            sb.append(")");
        }else if(root.right != null){
            //左子树为空，但右子树不为空
            sb.append("()");
        }
        //再看右子树的情况
        if(root.right != null){
            //右子树不为空
            sb.append("(");
            tree2str(root.right);
            sb.append(")");
        }
        //返回拼接好的字符串
        return sb.toString();
    }
}
